/**
 * 策略模式:
 *  在软件开发的过程中，我们实现某一个功能有多种算法或者策略，我们可以根据条件的不同选择不同的算法或者策略。
 *  我们在编码的时候如何让算法和对象分开来，如何让算法可以独立于使用它的客户而变化？
 *
 *  策略模式：它定义了算法家族，分别封装起来，可以让他们之间可以互相替换，让算法的变化，不会影响到使用算法的客户。
 *
 *  例子：某商场会定期退出各种活动，例如8折，5折，满减等
 *
 *  缺点：
 *      （1）客户端需要知道所有的策略类，并自行确定使用哪个策略类
 *      （2）策略模式将造成产生很多策略类
 *  改进：我们可以用策略类和简单工厂模式结合，这样我们客户端不需要知道有多少策略类。
 *        客户端值需要认识一个CashContext就可以
 *
 *  抽象策略类：
 *      @see BehavioralModel.StrategyPattern.CashStrage
 *  具体策略类：
 *      @see BehavioralModel.StrategyPattern.CashRebate
 *  环境类：关联策略类
 *      @see BehavioralModel.StrategyPattern.CashContext
 *
 * @author 王蕾 [wanglei_dev@cyou-inc.com]
 * @date 2017-12-07 11:52:00
 */
package BehavioralModel.StrategyPattern;